<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>响应式与非响应式的数组方法</title>
  <style>
    #app ul {
      width: 80px;
      list-style: none;
    }

    .red {
      color: red;
    }

    .click {
      padding-top: 15px;
      cursor: pointer;
      transition: 0.3s;
    }

    .click:hover {
      transform: scale(1.2, 1.2);
    }
  </style>
</head>

<body>

  <div id="app">
    <ul>
      <!-- key绑定item元素 与 item一一对应，结构节点唯一，列表再进行中间插入会直接生成一个新的li标签，提高性能 -->
      <li class="click" v-for="(item, index) in letters" :key="index + item">{{ item }}</li>
    </ul>

    <button @click="btnCLick">点我试试，有惊喜！</button>
  </div>

  <script src="../../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        letters: ['a', 'b', 'f', 'c', 'd', 'e']
      },

      methods: {
        btnCLick() {
          let start = 2;
          // 响应式区域:
          // 1. push() 在数组末尾添加一个或多个元素，多个用逗号隔开即可
          this.letters.push("牛批");

          // 2. pop() 删除数组末尾最后一个元素
          // this.letters.pop();

          // 3. shift() 删除数组头部第一个元素
          // this.letters.shift();

          // 4. unshift() 在数组头部添加一个或多个元素，多个用逗号隔开即可
          // this.letters.unshift("牛批", "我爱了");

          // 5. splice(arg1, arg2, arg3) 插入/替换/删除元素
          // arg1: 第几个元素开始，操作并不包括这个元素
          // arg2: 删除几个元素
          // arg3: 插入元素是什么
          // a. 从第一个元素开始删除一个元素
          // this.letters.splice(1, 1);
          // b. 从第二个元素开始删除后面所有元素
          // this.letters.splice(start, this.letters.length - start);
          // c. 替换第三个元素为'X'
          // this.letters.splice(start, 1, 'X');
          // d. 从第二个元素开始添加多个元素
          // this.letters.splice(start, 0, 'X', 'Y', 'Z');

          // 6. Vue.set(要修改的对象，索引值, 修改后的值);
          // Vue.set(this.letters, 0, 'abc');

          // 7. sort() 排序，默认升序排列
          // this.letters.sort();

          // 8. reverse() 反转数组
          // this.letters.reverse();

          // 非响应式区域:
          // 1. 直接通过索引更改数组元素
          // this.letters[0] = 'abc';
        }
      }
    })
  </script>
</body>

</html>